今回は実際のアップロード処理について。
前回までにPHPのアップロード処理を呼ぶまでの前処理について説明。
http://kenzy-goldentime.blogspot.com/2011/06/php-2lastmodifieddate.html
今回のポイント
- アップロード先、ファイル数、ファイル名をパラメータで受け取る
- $_FILES属性でアップロード元情報とアップロード先情報を取得
- 写真が横長か縦長かを判定し、見える方向で画像を登録
- image用とthumbnail用の画像を作成
です。
まず1.のPHPとして受信した情報の取得について。
以下コード
$photoDir = $_POST["photoDir"];
PHPでPOSTのパラメータを取得するには、$_POST["パラメータ名"]で取得可能。
次に2.の$_FILESについて。
変数「$_FILE」には、アップロードされたファイル情報が連想配列で格納されるらしい。
http://www.php-ref.com/web/03_move_uploaded_file.html
で、とりあえず今回使用する$_FILES属性は
- $_FILE[ パラメータ名 ][ tmp_name ] →アップロード前の一時保存パス
- $_FILE[ パラメータ名 ][ name] →アップロードファイル名
まずは上記のパラメータからtmp_nameから実際にそのファイルがあるかを判定。以下ソース
if (is_uploaded_file($tmpName)) {
次に3.getimagesizeを使用してサイズを取得し、横長か縦長かを判定。
$Jsize=getimagesize("$tmpName"); //画像サイズ取得
// 横長写真
if ($Jsize[0] > $Jsize[1]) {
$Jthumsize = $Jsize[0];
$SizeWidth = true;
// 縦長写真
} else {
$Jthumsize = $Jsize[1];
$SizeWidth = false;
}
最後に4.image用とthumbnail用に画像を圧縮。
以下ソース。
function imageComplex($pixel, $Jsize, $Jthumsize, $SizeWidth, $motoFile, $complexFile){
if($Jthumsize >= $pixel + 1){ //121ピクセル以上なら
if ($SizeWidth) {
$Jwidth = $pixel; //横120ピクセル
$Jheight = $Jsize[1] * $pixel / $Jsize[0]; //縦サイズを計算
} else {
$Jwidth = $Jsize[0] * $pixel / $Jsize[1]; //横サイズを計算
$Jheight = $pixel; //縦120ピクセル
}
$imagein=imagecreatefromjpeg("$motoFile"); //画像を縮小する
$imageout=imagecreatetruecolor($Jwidth,$Jheight); //サイズ変更(GD2使用)
imagecopyresampled($imageout,$imagein,0,0,0,0,$Jwidth,$Jheight,$Jsize[0],$Jsize[1]);
imagejpeg($imageout,("$complexFile")); //サムネイル書き出し
imagedestroy($imagein); //メモリを解放する
imagedestroy($imageout); //メモリを解放する
}
else {//画像の横幅がもともと120ピクセル以下の場合は [thumbs] ディレクトリにコピーします。
copy("$motoFile","$complexFile"); //ファイルコピー
}
}
以下1~3のコード
if (is_uploaded_file($tmpName)) {
$image = $imageDir . $fileName;
$thumb = $thumbDir . $fileName;
$Jsize=getimagesize("$tmpName"); //画像サイズ取得
// 横長写真
if ($Jsize[0] > $Jsize[1]) {
$Jthumsize = $Jsize[0];
$SizeWidth = true;
// 縦長写真
} else {
$Jthumsize = $Jsize[1];
$SizeWidth = false;
}
// image圧縮
imageComplex(1600, $Jsize, $Jthumsize, $SizeWidth, $tmpName, $image);
// thumb圧縮
imageComplex(120, $Jsize, $Jthumsize, $SizeWidth, $tmpName, $thumb);
chmod($image, 0644);
echo $fileName . "をアップロードしました。";
} else {
echo "ファイルが選択されていません。";
}
とまー、PHPで書くとスクリプト言語でデバッグしやすいかな。
ただ統一感をだすにはCAKEとかのフレームワークつかっていいかも。